package org.leyi.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;
import org.leyi.shop.model.pojo.User;
import org.leyi.shop.model.vo.SafetyUser;

import java.util.List;

/**
* @author lenovo
* description 针对表【user(用户表)】的数据库操作Service
* create  2024-05-04 23:18:42
*/
public interface UserService extends IService<User> {
    /**
     *
     * description: 注册用户
     * @param userAccount 账号
     * @param userPassword 密码
     * @return Integer 该用户的对应id
     * @author  lenovo
     * create 2024/5/6-20:03
     */
    Long register(String userAccount, String userPassword);

    /**
     *
     * description: 登录
     * @param userAccount 用户账号
     * @param userPassword 用户密码
     * @return SafetyUser 该用户的非敏感信息
     * @author  lenovo
     * create 2024/5/6-20:03
     */
    SafetyUser login(String userAccount, String userPassword, HttpServletRequest request);

    /**
     *
     * description: 微信一键登录
     * @param userAccount 只需要接收用户账号即可完成登录，并将密码在前端返回提醒
     * @return SafetyUser
     * @author  lenovo
     * create 2024/5/6-20:04
     */
    SafetyUser registerByWechat(String userAccount);

    /**
     *
     * description: 用户注销
     * @param id 传入用户的id
     * @author  lenovo
     * create 2024/5/6-20:05
     */
    void deleteUserById(Long id);

    /**
     *
     * description: 用户修改信息
     * @param safetyUser 只对非空字段进行更新,该业务无法更新密码，权限。
     * @return SafetyUser 传入修改后的结果
     * @author  lenovo
     * create 2024/5/6-20:06
     */
     SafetyUser modifyUser(SafetyUser safetyUser);

    /**
     *
     * description: 用用户的id进行模糊查询
     * @param id 用户的id
     * @return ArrayList<SafetyUser> 返回所查询的用户列表
     * @author  lenovo
     * create 2024/5/6-20:09
     */

     List<SafetyUser> searchUserById(Long id);

    /**
     *
     * description: 对用户的密码进行更新
     * @param id 用户的id
     * @param oldPassword 传入用户的原密码
     * @param newPassword 传入用户的新密码
     * @author  lenovo
     * create 2024/5/6-21:15
     */
     void modifyUserPassword(Long id,String oldPassword,String newPassword);

    /**
     *
     * description: 对用户的权限进行更改
     * @param id 用户的id
     * @param updateRole 用户即将赋予的管理员权限
     * @author  lenovo
     * create 2024/5/6-21:16
     */
     void modifyUserRole(Long id,Integer updateRole);
    /**
     *
     * description: 用用户名来实现模糊查询
     * @param userName 用户的用户名字段
     * @return ArrayList<SafetyUser>
     * @author  lenovo
     * create 2024/5/6-20:08
     */

     List<SafetyUser> searchUserByName(String userName);

    /**
     *
     * description: 通过账号模糊查询
     * @param userAccount 传入用户的账号
     * @return ArrayList<SafetyUser> 返回查询后的用户账号
     * @author  lenovo
     * create 2024/5/6-20:10
     */
     List<SafetyUser> searchUserByAccount(String userAccount);

    /**
     *
     * description: 获取到当前登录态的用户信息(该方法也可用于去数据库获取最新的用户信息）
     * @return SafetyUser 放回该登录态的用户信息
     * @author  lenovo
     * create 2024/5/6-20:11
     */
    SafetyUser getCurrentUser();

    /**
     *
     * description: 用户登出
     * @author  lenovo
     * create 2024/5/9-16:15
     */
    void logout(HttpServletRequest request);
}
